#pragma once
#include <sstream>

#include <string>

#include "SQLNumericLiteralExpr.h"

class SQLDataType;

class SQLIntegerExpr 
: virtual public SQLNumericLiteralExpr
{

private:
  double number;

public:
  static string_ptr class_;
  static SQLDataType_ptr DATA_TYPE;
  SQLIntegerExpr(double number);
  SQLIntegerExpr(double number, SQLObject_ptr parent);
  SQLIntegerExpr();
  virtual ~SQLIntegerExpr();
  SHAREDOBJECT(SQLIntegerExpr);

  double getNumber();
  int intValue();

  void setNumber(double number);

  void output(std::stringstream *buf);

  int hashCode();
  bool equals(Object_ptr obj);
  // SQLIntegerExpr* clone();
  virtual SQLObject_ptr clone();

protected:
  void accept0(SQLASTVisitor_ptr visitor);
};
